package com.test.event;

import com.test.listener.ApplicationListener;

/**
 * ApplicationEventMulticaster接口定义了应用程序事件多播器的行为
 * 它负责将应用程序事件广播到所有注册的监听器
 */
public interface ApplicationEventMulticaster {

    /**
     * 添加一个应用程序监听器
     * 监听器将接收由multicastEvent方法广播的事件
     *
     * @param listener 要添加的应用程序监听器，不能为null
     */
    void addApplicationListener(ApplicationListener<?> listener);

    /**
     * 移除一个已注册的应用程序监听器
     *
     * @param listener 要移除的应用程序监听器，不能为null
     */
    void removeApplicationListener(ApplicationListener<?> listener);

    /**
     * 移除所有已注册的应用程序监听器
     * 当不再需要任何监听器时，可以使用此方法进行清理
     */
    void removeAllListeners();

    /**
     * 广播一个应用程序事件
     * 此方法将事件传递给所有已注册的监听器，由监听器根据事件类型决定如何处理
     *
     * @param event 要广播的应用程序事件，不能为null
     */
    void multicastEvent(ApplicationEvent event);
}
